From 155235cb7e375433e458791f2f3dea91745a5d82 Mon Sep 17 00:00:00 2001 From: robertl Date: Tue, 1 Oct 2002 21:39:43 +0000 Subject: [PATCH] Add Navitrak DNA format, from Tim Zickus, tez@zickus.com --- gpsbabel/Makefile | 3 +- gpsbabel/README | 8 ++ gpsbabel/dna.c | 162 +++++++++++++++++++++++++++++++++ gpsbabel/reference/dnatest.txt | 16 ++++ gpsbabel/testo | 4 + gpsbabel/vecs.c | 6 ++ 6 files changed, 198 insertions(+), 1 deletion(-) create mode 100644 gpsbabel/dna.c create mode 100644 gpsbabel/reference/dnatest.txt diff --git a/gpsbabel/Makefile b/gpsbabel/Makefile index 4fb6dfbf2..e7b6dac98 100644 --- a/gpsbabel/Makefile +++ b/gpsbabel/Makefile @@ -2,7 +2,7 @@ CFLAGS=-g -Icoldsync FMTS=magproto.o gpx.o geo.o gpsman.o mapsend.o mapsource.o \ gpsutil.o tiger.o pcx.o csv.o cetus.o gpspilot.o magnav.o \ - psp.o mxf.o holux.o garmin.o ozi.o + psp.o mxf.o holux.o garmin.o ozi.o dna.o JEEPS=jeeps/gpsapp.o jeeps/gpscom.o jeeps/gpsfmt.o jeeps/gpsinput.o \ jeeps/gpsmath.o jeeps/gpsmem.o \ @@ -24,6 +24,7 @@ clean: cetus.o: cetus.c defs.h queue.h coldsync/palm.h coldsync/pdb.h csv.o: csv.c defs.h queue.h csv_util.h +dna.o: dna.c defs.h queue.h csv_util.h csv_util.o: csv_util.c defs.h queue.h csv_util.h garmin.o: garmin.c defs.h queue.h jeeps/gps.h jeeps/gpsport.h \ jeeps/gpsserial.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \ diff --git a/gpsbabel/README b/gpsbabel/README index 5ce18ef52..e222bd5a1 100644 --- a/gpsbabel/README +++ b/gpsbabel/README @@ -141,6 +141,14 @@ THE FORMATS Professional, Take a Hike, and ExpertGPS import/export MFX. Contributed by Alex Mottram. + DNA + + Navitrak DNA marker format - Another CSV format file. + This is the format that is compatible with the DNA Desktop + import/export command. Reading the binary Markers.jwp + format directly off the data card is not supported yet. + Contributed by Tim Zickus. + OZI OziExplorer Waypoint Format - Another CSV format file. Tested diff --git a/gpsbabel/dna.c b/gpsbabel/dna.c new file mode 100644 index 000000000..d4116e983 --- /dev/null +++ b/gpsbabel/dna.c @@ -0,0 +1,162 @@ +/* + Comma separated value files for Navitrak DNA waypoints. + WPT#,Northing,Easting,Name + + 10/1/02 - t. e. zickus, shamelessly hacked from csv.c, below. + + Copyright (C) 2002 Robert Lipe, robertlipe@usa.net + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA + + */ + +#include "defs.h" +#include "csv_util.h" +#include + +static FILE *file_in; +static FILE *file_out; + +#define MYNAME "DNA" + +static void +rd_init(const char *fname) +{ + file_in = fopen(fname, "r"); + if (file_in == NULL) { + fatal(MYNAME ": Cannot open %s for reading\n", fname); + } +} + +static void +rd_deinit(void) +{ + fclose(file_in); +} + +static void +wr_init(const char *fname) +{ + file_out = fopen(fname, "w"); + if (file_out == NULL) { + fatal(MYNAME ": Cannot open %s for writing\n", fname); + } +} + +static void +wr_deinit(void) +{ + fclose(file_out); +} + +static void +data_read(void) +{ + char buff[1024]; + char *s; + int i; + waypoint *wpt_tmp; + int linecount = 0; + + do { + linecount++; + memset(&buff, '\0', sizeof(buff)); + fgets(buff, sizeof(buff), file_in); + + if (strlen(buff)) { + + wpt_tmp = xcalloc(sizeof(*wpt_tmp), 1); + s = buff; + + /* data delimited by commas, not enclosed */ + s = csv_lineparse(s, ",", "", linecount); + + i = 0; + + while (s) { + switch (i) { + case 0: // WPT #, skip. + break; + case 1: + wpt_tmp->position.latitude.degrees = atof(s); + break; + case 2: + wpt_tmp->position.longitude.degrees = atof(s); + break; + case 3: + wpt_tmp->description = csv_stringtrim(s, " "); + break; + default: + fprintf (stderr, "%s: Warning: unmapped data fields on line %d.\n", + MYNAME, linecount); + break; + } + i++; + + s = csv_lineparse(NULL, ",", "", linecount); + } + + wpt_tmp->creation_time = time(NULL); + + /* We'll make up our own shortname. */ + wpt_tmp->shortname = mkshort(wpt_tmp->description); + + waypt_add(wpt_tmp); + + } else { + /* empty line */ + } + + } while (!feof(file_in)); +} + +static void +dna_waypt_pr(const waypoint *wpt) +{ + double lon,lat; + char * description = NULL; + static int wpt_num = 0; + + lon = wpt->position.longitude.degrees; + lat = wpt->position.latitude.degrees; + + if (wpt->description) + description = csv_stringclean(wpt->description, ",\""); + + fprintf(file_out, "%d,%08.5f,%08.5f,%s\n", + wpt_num++, + lat, + lon, + description); + + if (description) + free (description); + +} + +static void +data_write(void) +{ + waypt_disp_all(dna_waypt_pr); +} + +ff_vecs_t dna_vecs = { + rd_init, + wr_init, + rd_deinit, + wr_deinit, + data_read, + data_write, +}; diff --git a/gpsbabel/reference/dnatest.txt b/gpsbabel/reference/dnatest.txt new file mode 100644 index 000000000..49bdf221c --- /dev/null +++ b/gpsbabel/reference/dnatest.txt @@ -0,0 +1,16 @@ +0,27.85049,-82.49305,MACDILL +1,27.84906,-82.49258,MACDILL PK NAIL +2,27.84604,-82.48745,BEAVER +3,27.85049,-82.49305,CARTER +4,27.87861,-82.58639,188 FLHD +5,27.81962,-82.60658,BRIGHTWATER E +6,27.82113,-82.60179,BRIGHTWATER D +7,27.82098,-82.60052,BRIGHTWATER C +8,27.81919,-82.59823,BRIGHTWATER B AZ MK 2 +9,27.81850,-82.59673,BRIGHTWATER B +10,27.93168,-82.42910,BRIDGE 2 +11,27.93139,-82.42889,BRIDGE 2 RM 3 +12,27.87694,-82.58806,GANDY RM 2 +13,27.87694,-82.58806,GANDY RM 4 +14,27.93139,-82.42889,BRIDGE 2 RM 4 +15,27.93169,-82.42927,H 261 RESET diff --git a/gpsbabel/testo b/gpsbabel/testo index 45762094f..cd5f5f874 100755 --- a/gpsbabel/testo +++ b/gpsbabel/testo @@ -67,6 +67,10 @@ diff ${TMPDIR}/mm.gps ${TMPDIR}/gu.wpt ${PNAME} -i magellan -f reference/magfile -o magellan -F ${TMPDIR}/magfile diff ${TMPDIR}/magfile reference/magfile +# Navitrak DNA marker format +${PNAME} -i dna -f reference/dnatest.txt -o dna -F ${TMPDIR}/dnatest.txt +diff ${TMPDIR}/dnatest.txt reference/dnatest.txt + # PSP (PocketStreets 2002 Pushpin (.PSP)) file format rm -f ${TMPDIR}/ps.psp ${TMPDIR}/psp.psp ${PNAME} -i psp -f reference/ps.psp -o psp -F ${TMPDIR}/psp.psp diff --git a/gpsbabel/vecs.c b/gpsbabel/vecs.c index d2adab487..4cb72c8d5 100644 --- a/gpsbabel/vecs.c +++ b/gpsbabel/vecs.c @@ -45,6 +45,7 @@ extern ff_vecs_t garmin_vecs; extern ff_vecs_t mxf_vecs; extern ff_vecs_t holux_vecs; extern ff_vecs_t ozi_vecs; +extern ff_vecs_t dna_vecs; static vecs_t vec_list[] = { @@ -98,6 +99,11 @@ vecs_t vec_list[] = { "csv", "Comma separated values" }, + { + &dna_vecs, + "dna", + "Navitrak DNA marker format" + }, { &psp_vecs, "psp", -- 2.30.2